package com.example.java_websocket.service.impl;

import com.example.java_websocket.service.IMessageRankService;
import com.example.java_websocket.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ZSetOperations;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import java.util.Set;

@Service
public class MessageRankServiceImpl implements IMessageRankService {

    //MESSAGE_RANK_KEY 是 Redis 中的一个键（key），用来存储用户消息数量的排行榜。
    //这里的键名是 chat:message_rank，表示这是一个与聊天相关的消息排行榜。
    private static final String MESSAGE_RANK_KEY = "chat:message_rank";

    @Autowired
    private RedisTemplate<String, String> redisTemplate;

    @Autowired
    private IUserService userService;

    // 增加用户消息计数
    @Override
    public void incrementMessageCount(String userId) {
        //incrementScore:增加有序集合中某个成员的分数。如果成员不存在，则将其添加到有序集合中。
        redisTemplate.opsForZSet().incrementScore(MESSAGE_RANK_KEY, userId, 1);
    }

    // 获取Top10用户
    @Override
    public Set<ZSetOperations.TypedTuple<String>> getTopUsers() {
        //reverseRangeWithScores 是获取有序集合中分数从高到低排序的成员。
        //0 和 9 表示获取排名从第 0 到第 9 的成员（即前 10 名）。
        //其中每个 TypedTuple 包含用户的 ID（value）和消息数量（score）。
        return redisTemplate.opsForZSet()
                .reverseRangeWithScores(MESSAGE_RANK_KEY, 0, 9);
    }

}
